package models

import "time"

// 结构体命名格式
// 结构体没特殊情况一律先使用大驼峰
// 表全量结构体直接使用表名称的大驼峰
// 查询条件 GET请求使用 [表名称]+[接口path简写英文]+Params
// 表单信息 POST请求使用 [表名称]+[接口path简写英文]+Body

// 帅选表查询结果  [表名称]+[接口path简写英文，多个接口组合使用And拼接]+Select
// 响应数据（Data里边的） GET、POST请求使用 [表名称]+[接口path简写英文]+Res
// 拆分通用类写入commomType文件中

// SysUser 代表系统用户的结构体
type SysUser struct {
	Id        uint64 `json:"id"`         // 用户ID
	Username  string `json:"username"`   // 用户名
	Nickname  string `json:"nickname"`   // 昵称
	Avatar    string `json:"avatar"`     // 用户头像
	CreateBy  int64  `json:"create_by"`  // 创建人ID
	DeptId    int64  `json:"dept_id"`    // 部门ID
	Email     string `json:"email"`      // 用户邮箱
	Gender    int8   `json:"gender"`     // 性别((1-男 2-女 0-保密)
	IsDeleted int    `json:"is_deleted"` // 逻辑删除标识(0-未删除 1-已删除)
	Mobile    string `json:"mobile"`     // 联系方式
	Status    uint8  `json:"status"`     // 状态((1-正常 0-禁用)
	UpdateBy  int64  `json:"update_by"`  // 修改人ID
	Password  string `json:"password"`   // 密码
}

//*********** 登录验证 ***********

// UserWithRole 定义查询结果的结构体
type UserWithRole struct {
	UserID   int    `gorm:"column:userId"   json:"userId"`
	Username string `gorm:"column:username" json:"username"`
	Nickname string `gorm:"column:nickname" json:"nickname"`
	DeptID   int    `gorm:"column:dept_id"  json:"deptId"`
	Roles    string `gorm:"column:roles"    json:"roles"`
	Password string `gorm:"column:password" json:"password"`
	Status   int    `gorm:"column:status"   json:"status"`
}

// SysUserUsersLoginTokenUserInfo 登录：token-payload-userinfo
type SysUserUsersLoginTokenUserInfo struct {
	UserID   uint64 `json:"userId"`   // 用户ID
	Username string `json:"username"` // 用户名
	Nickname string `json:"nickname"` // 昵称
	DeptID   int64  `json:"deptId"`   // 部门ID
	Roles    string `json:"roles"`    // 多个角色代码合并为一个逗号分隔的字符串
}

// SysUserUsersLoginBody 登录：验证用户信息表单结构体
type SysUserUsersLoginBody struct {
	Username string `json:"username"` // 用户名
	Password string `json:"password"` // 密码
}

//*********** 根据token获取当前登录用户信息 ***********

type SysUserUsersMeSelect struct {
	UserID   int    `gorm:"column:userId"   json:"userId"`
	Username string `gorm:"column:username" json:"username"`
	Nickname string `gorm:"column:nickname" json:"nickname"`
	Avatar   string `gorm:"column:avatar" json:"avatar"`
}

type SysUserUsersMeRes struct {
	UserID   int64    `json:"userId"`   // 用户ID
	Avatar   string   `json:"avatar"`   // 头像地址
	Nickname string   `json:"nickname"` // 用户昵称
	Perms    []string `json:"perms"`    // 用户权限标识集合
	Roles    []string `json:"roles"`    // 用户角色编码集合
}

//*********** 获取用户表单数据 ***********

// SysUserUsersFormSelect 定义用户表单查询结果的结构体
type SysUserUsersFormSelect struct {

	// 用户头像
	Avatar string `gorm:"column:avatar" json:"avatar"`
	// 部门ID
	DeptID int64 `gorm:"column:dept_id" json:"deptId"`
	// 邮箱
	Email string `gorm:"column:email" json:"email"`
	// 性别
	Gender int8 `gorm:"column:gender" json:"gender"`
	// 用户ID
	ID     int64  `gorm:"column:id" json:"id"`
	Mobile string `gorm:"column:mobile" json:"mobile"`
	// 昵称
	Nickname string `gorm:"column:nickname" json:"nickname"`

	// 用户状态(1:正常;0:禁用)
	Status int64 `gorm:"column:status" json:"status"`
	// 用户名
	Username string `gorm:"column:username" json:"username"`
}

// SysUserUsersFormRes 定义用户表单响应结果的结构体
type SysUserUsersFormRes struct {
	// 用户头像
	Avatar string `json:"avatar"`
	// 部门ID
	DeptID int64 `json:"deptId"`
	// 邮箱
	Email string `json:"email"`
	// 性别
	Gender int8 `json:"gender"`
	// 用户ID
	ID     int64  `json:"id"`
	Mobile string `json:"mobile"`
	// 昵称
	Nickname string `json:"nickname"`
	// 角色ID集合
	RoleIDS []int64 `json:"roleIds"`
	// 用户状态(1:正常;0:禁用)
	Status int64 `json:"status"`
	// 用户名
	Username string `json:"username"`
}

//*********** 获取用户列表 ***********

// SysUserUsersPageListParams 检索查询数据条件
type SysUserUsersPageListParams struct {
	DeptID    string `form:"deptId"`    // 部门ID
	EndTime   string `form:"endTime"`   // 创建结束时间
	Keywords  string `form:"keywords"`  // 关键字(用户名/昵称/手机号)
	StartTime string `form:"startTime"` // 创建开始时间
	Status    string `form:"status"`    // 用户状态
}

// SysUserUsersListRedisKey 获取用户列表：Redis-key
type SysUserUsersListRedisKey struct {
	Query      SysUserUsersPageListParams
	Pagination PaginationParams
}

// SysUserUsersPageListSelect 分页的用户查询结果: 表Select
type SysUserUsersPageListSelect struct {
	Avatar      string `gorm:"column:avatar" json:"avatar"`          // 用户头像地址
	CreateTime  string `gorm:"column:create_time" json:"createTime"` // 创建时间
	DeptName    string `gorm:"column:dept_name" json:"deptName"`     // 部门名称
	Email       string `gorm:"column:email" json:"email"`            // 用户邮箱
	GenderLabel string `gorm:"-" json:"genderLabel"`                 // 性别
	Gender      string `gorm:"column:gender" json:"gender"`          // 性别
	ID          int64  `gorm:"column:id" json:"id"`                  // 用户ID
	Mobile      string `gorm:"column:mobile" json:"mobile"`          // 手机号
	Nickname    string `gorm:"column:nickname" json:"nickname"`      // 用户昵称
	RoleNames   string `gorm:"column:role_names" json:"roleNames"`   // 角色名称，多个使用英文逗号(,)分割
	Status      int64  `gorm:"column:status" json:"status"`          // 用户状态(1:启用;0:禁用)
	Username    string `gorm:"column:username" json:"username"`      // 用户名
}

// SysUserUsersPageListRes 用户分页列表响应结果
type SysUserUsersPageListRes struct {
	List     []SysUserUsersPageListSelect `json:"list"`
	Total    int64                        `json:"total"`
	PageNum  int                          `json:"pageNum"`
	PageSize int                          `json:"pageSize"`
}

//*********** 新增用户 ***********

// SysUserAddParams  添加用户表单对象
type SysUserAddParams struct {
	Avatar   string  `json:"avatar"`   // 用户头像
	DeptID   int64   `json:"deptId"`   // 部门ID
	Email    string  `json:"email"`    // 邮箱
	Gender   int8    `json:"gender"`   // 性别
	ID       int64   `json:"id"`       // 用户ID
	Mobile   string  `json:"mobile"`   // 手机号
	Nickname string  `json:"nickname"` // 昵称
	RoleIDS  []int64 `json:"roleIds"`  // 角色ID集合
	Status   int64   `json:"status"`   // 用户状态(1:正常;0:禁用)
	Username string  `json:"username"` // 用户名
}

// SysUserAddData username, nickname, gender, password, dept_id, mobile, status, email, create_time, update_time
type SysUserAddData struct {
	Avatar     string    `gorm:"column:avatar" json:"avatar"` // 用户头像
	ID         int64     `gorm:"column:id;primaryKey;autoIncrement"`
	Username   string    `gorm:"column:username"`
	Nickname   string    `gorm:"column:nickname"`
	Gender     int8      `gorm:"column:gender"`
	DeptID     int64     `gorm:"column:dept_id"`
	Mobile     string    `gorm:"column:mobile"`
	Status     int       `gorm:"column:status"`
	Email      string    `gorm:"column:email"`
	Password   string    `gorm:"column:password"`
	CreateTime time.Time `gorm:"column:create_time"`
	UpdateTime time.Time `gorm:"column:update_time"`
}

//*********** 修改用户 ***********

// SysUserEditParams  修改用户表单对象
type SysUserEditParams struct {
	Avatar   string  `json:"avatar"`   // 用户头像
	DeptID   int64   `json:"deptId"`   // 部门ID
	Email    string  `json:"email"`    // 邮箱
	Gender   int8    `json:"gender"`   // 性别
	Mobile   string  `json:"mobile"`   // 手机号
	Nickname string  `json:"nickname"` // 昵称
	RoleIDS  []int64 `json:"roleIds"`  // 角色ID集合
	Status   int64   `json:"status"`   // 用户状态(1:正常;0:禁用)
	Username string  `json:"username"` // 用户名
}

// SysUserEditData username, nickname, gender, password, dept_id, mobile, status, email, create_time, update_time
type SysUserEditData struct {
	Avatar     string    `gorm:"column:avatar" json:"avatar"` // 用户头像
	ID         int64     `gorm:"column:id;primaryKey;autoIncrement"`
	Username   string    `gorm:"column:username"`
	Nickname   string    `gorm:"column:nickname"`
	Gender     int8      `gorm:"column:gender"`
	DeptID     int64     `gorm:"column:dept_id"`
	Mobile     string    `gorm:"column:mobile"`
	Status     int       `gorm:"column:status"`
	Email      string    `gorm:"column:email"`
	Password   string    `gorm:"column:password"`
	CreateTime time.Time `gorm:"column:create_time"`
	UpdateTime time.Time `gorm:"column:update_time"`
}

//*********** 删除用户 ***********

type SysUserId struct {
	ID int64 `gorm:"column:id;primaryKey;autoIncrement"`
}

//*********** 删除用户 ***********

type SysUserPassword struct {
	Password string `form:"password"`
}

//*********** 删除用户 ***********

type SysUserStatus struct {
	Status int64 `form:"status"`
}

//*********** 获取个人中心用户信息 ***********

// UserProfile 个人中心用户信息
type UserProfile struct {
	// 头像URL
	Avatar string `gorm:"column:avatar" json:"avatar"`
	// 邮箱
	Email string `gorm:"column:email" json:"email"`
	// 性别
	Gender int8 `gorm:"column:gender" json:"gender"`
	// 用户ID
	ID *int64 `gorm:"column:id" json:"id"`
	// 手机号
	Mobile string `gorm:"column:mobile" json:"mobile"`
	// 用户昵称
	Nickname string `gorm:"column:nickname" json:"nickname"`
	// 用户名
	Username string `gorm:"column:username" json:"username"`
}
